﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using orienta.Models;
using orienta.Helper;
using System.Text;

namespace orienta.Controllers
{
    public class FuncionarioController : OrientaController
    {
        private GoodTireEntities db = new GoodTireEntities();

        //LCR CABECERA PARA REGISTRO NUEVO FUNCIONARIO 06ABRIL2013

        public ActionResult newFuncionarioCab()
        {
            ViewBag.nIdeTipoDoc = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento");
            ViewBag.nIdeUsuReg = new SelectList(db.ORIMaeUsuario, "nIdeUsu", "vCodUsuario");
            return View();
        }
        public ActionResult listaFuncionarioDet()
        {
            String vPrimNombre = Request["vPrimNombre"];
            String vPrimApellido = Request["vPrimApellido"];
            String vSegApellido = Request["vSegApellido"];

            String[] parametros = new String[] { vPrimNombre, vPrimApellido, vSegApellido };
            String[] nombreParametros = new String[] { "vPrimNombre", "vPrimApellido", "vSegApellido" };

            IList<dynamic> lista = EstadisticaHelper.executeStore("usp_lista_funcionario", parametros, nombreParametros);
            return View(lista);
        }

        public ActionResult updateFuncionarioInp()
        {
            String idFuncionario = Request["idFuncionario"];
            ViewBag.tituloPopup = "Actualizacion de Datos del Funcionario";
            String[] parametros = new String[] { idFuncionario };
            ViewBag.parra = parametros;

            return View(parametros);
        }

        public ActionResult newRegFuncionarioInp()
        {
            ViewBag.tituloPopup = "Registrar Datos del Funcionario";
            return View();
        }

        public HtmlString newRegFuncionarioFinal()
        {
            String vPrimNombre = Request["vPrimNombre"];
            String VSegNombre = Request["VSegNombre"];
            String vPrimApellido = Request["vPrimApellido"];
            String vSegApellido = Request["vSegApellido"];
            String vNumDocum = Request["vNumDocum"];
            String dFecFinVig = Request["dFecFinVig"];
            String dFecInicio = Request["dFecInicio"];
            String nIdeUsuReg = "1";

            String[] parametros = new String[] { vPrimNombre.ToUpper(), VSegNombre.ToUpper(), vPrimApellido.ToUpper(), vSegApellido.ToUpper(), vNumDocum, dFecInicio, dFecFinVig, nIdeUsuReg };
            String[] nombreParametros = new String[] { "vPrimNombre", "VSegNombre", "vPrimApellido", "vSegApellido", "vNumDocum", "dFecInicio", "dFecFinVig", "nIdeUsuReg" };
            IList<dynamic> lista = EstadisticaHelper.executeStore("ORI_SP_FuncionarioRegistra", parametros, nombreParametros);

            StringBuilder rpta = new StringBuilder("alert('Registro Realizado Correctamente');");
            rpta.Append("window.opener.parent.document.getElementById('btnBuscar').click();");
            rpta.Append("window.close();");
            var rptax = new HtmlString(string.Format("<script language='javascript' type='text/javascript'>{0}</script>", rpta));
            return (HtmlString)rptax;
        }



        public ActionResult asociarAreaFuncionarioInp(String sw)
        {
            ViewBag.tituloPopup = "Asociar Funcionario a Area";
            String nIdFuncionario = Request["idFuncionario"];
            sw = (sw == null) ? "" : sw;


            if (sw.Equals("1"))
            {
                String[] parametros = new String[] { nIdFuncionario };
                String[] nombreParametros = new String[] { "nIdFuncionario" };
                IList<dynamic> lista = EstadisticaHelper.executeStore("usp_lista_funcionario_area", parametros, nombreParametros);
                return View(lista);
            }
            else
            {
                String nIdeDep = Request["nIdeDep"];
                String dFecInicio = Request["dFecInicio"];
                String dFecFinVig = Request["dFecFinVig"];
                String nIdeUsuReg = "1";
                int limiteGuion = nIdeDep.LastIndexOf('-');
                int indice1 = nIdeDep.IndexOf('<');
                nIdeDep = nIdeDep.Substring(indice1 + Convert.ToInt32("1"), 4);
                ViewBag.nombre = Request["nombre"];



                String[] parametros = new String[] { nIdeDep, nIdFuncionario, nIdeUsuReg, dFecInicio, dFecFinVig };
                String[] nombreParametros = new String[] { "nIdeDep", "nIdeFuncionario", "nIdeUsuReg", "dFecInicio", "dFecFinVig" };
                IList<dynamic> lista = EstadisticaHelper.executeStore("SP_FuncionarioAsociaArea", parametros, nombreParametros);
                return View(lista);
            }
        }


        public HtmlString updateFuncionarioById()
        {
            String vPrimNombre = Request["vPrimNombre"];
            String VSegNombre = Request["VSegNombre"];
            String vPrimApellido = Request["vPrimApellido"];
            String vSegApellido = Request["vSegApellido"];
            String vNumDocum = Request["vNumDocum"];
            String dFecFinVig = Request["dFecFinVig"];
            String dFecInicio = Request["dFecInicio"];
            String idFuncionario = Request["idFuncionario"];


            // String dFecFinVig = (Request["dFecFinVig"]=="") ? null : Request["dFecFinVig"];


            String[] parametros = new String[] { vPrimNombre, VSegNombre, vPrimApellido, vSegApellido, vNumDocum, dFecInicio, dFecFinVig, idFuncionario };
            String[] nombreParametros = new String[] { "vPrimNombre", "VSegNombre", "vPrimApellido", "vSegApellido", "vNumDocum", "dFecInicio", "dFecFinVig", "idFuncionario" };
            IList<dynamic> lista = EstadisticaHelper.executeStore("uspUpdateFuncionario", parametros, nombreParametros);

            StringBuilder rpta = new StringBuilder("alert('Registro Actualizado Correctamente');");
            rpta.Append("window.opener.parent.document.getElementById('btnBuscar').click();");
            rpta.Append("window.close();");

            var rptax = new HtmlString(string.Format("<script language='javascript' type='text/javascript'>{0}</script>", rpta));


            return (HtmlString)rptax;
        }



        public ActionResult updateFuncionarioById_old()
        {
            String idFuncionario = Request["idFuncionario"];
            StringBuilder rpta = new StringBuilder("<script language='javascript' type='text/javascript'>");
            rpta.Append("alert('Registro Actualizado Correctamente');");

            rpta.Append("window.close();");
            rpta.Append("</script>");


            StringBuilder rpta1 = new StringBuilder("");
            rpta1.Append("alert();");
            rpta1.Append("window.opener.parent.document.getElementById(/'btnBuscar/').click();");
            rpta1.Append("window.close();");

            StringBuilder rpta2 = new StringBuilder("chevere se actualizo");




            //String rpta="<script language='javascript' type='text/javascript'>";
            //  $rpta.="window.opener.parent.document.getElementById('buscar').click();";
            //$rpta.="window.close();";
            //$rpta.="</script>";
            //echo $rpta;


            ViewBag.rpta1 = rpta1;
            ViewBag.rpta = rpta;
            ViewBag.rpta2 = rpta2;

            return View();
        }






        //LCR CABECERA PARA REGISTRO NUEVO FUNCIONARIO 06ABRIL2013


        //
        // GET: /Funcionario/

        public ViewResult Index()
        {
            int dependencia = Int32.Parse(Request["dependencia"]);
            validar(User.Identity.Name);

            //@todo pendiente mantenimiento
            var listFuncionarioDependencia = (from MaeDep in db.ORIMaeFuncionario
                                              join dep in db.ORIDetFuncionarioDepen on MaeDep.nIdeFuncionario equals dep.nIdeFuncionario
                                              where dep.nIdeDep == dependencia && MaeDep.nIdeFuncionario != usuario.nIdeFuncionario
                                              select MaeDep);

            var listDependencia = (from func in db.ORIMaeFuncionario
                                   join dep in db.ORIMaeUsuario on func.nIdeFuncionario equals dep.nIdeFuncionario
                                   where dep.nIdeDep == dependencia && func.nIdeFuncionario != usuario.nIdeFuncionario
                                   select func);

            List<ORIMaeFuncionario> lista = listDependencia.ToList();
            foreach (ORIMaeFuncionario fun in listFuncionarioDependencia)
            {
                if (!lista.Contains(fun))
                    lista.Add(fun);
            }

            return View(lista);
        }

        //
        // GET: /Funcionario/Details/5

        public ViewResult Details(decimal id)
        {



            ORIMaeFuncionario orimaefuncionario = db.ORIMaeFuncionario.Single(o => o.nIdeFuncionario == id);
            return View(orimaefuncionario);
        }

        //
        // GET: /Funcionario/Create

        public ActionResult Create()
        {
            ViewBag.nIdeTipoDoc = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento");
            ViewBag.nIdeUsuReg = new SelectList(db.ORIMaeUsuario, "nIdeUsu", "vCodUsuario");
            return View();
        }

        //
        // POST: /Funcionario/Create

        [HttpPost]
        public ActionResult Create(ORIMaeFuncionario orimaefuncionario)
        {
            if (ModelState.IsValid)
            {
                db.ORIMaeFuncionario.AddObject(orimaefuncionario);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.nIdeTipoDoc = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento", orimaefuncionario.nIdeTipoDoc);
            ViewBag.nIdeUsuReg = new SelectList(db.ORIMaeUsuario, "nIdeUsu", "vCodUsuario", orimaefuncionario.nIdeUsuReg);
            return View(orimaefuncionario);
        }

        //
        // GET: /Funcionario/Edit/5

        public ActionResult Edit(decimal id)
        {
            ORIMaeFuncionario orimaefuncionario = db.ORIMaeFuncionario.Single(o => o.nIdeFuncionario == id);
            ViewBag.nIdeTipoDoc = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento", orimaefuncionario.nIdeTipoDoc);
            ViewBag.nIdeUsuReg = new SelectList(db.ORIMaeUsuario, "nIdeUsu", "vCodUsuario", orimaefuncionario.nIdeUsuReg);
            return View(orimaefuncionario);
        }

        //
        // POST: /Funcionario/Edit/5

        [HttpPost]
        public ActionResult Edit(ORIMaeFuncionario orimaefuncionario)
        {
            if (ModelState.IsValid)
            {
                db.ORIMaeFuncionario.Attach(orimaefuncionario);
                db.ObjectStateManager.ChangeObjectState(orimaefuncionario, EntityState.Modified);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.nIdeTipoDoc = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento", orimaefuncionario.nIdeTipoDoc);
            ViewBag.nIdeUsuReg = new SelectList(db.ORIMaeUsuario, "nIdeUsu", "vCodUsuario", orimaefuncionario.nIdeUsuReg);
            return View(orimaefuncionario);
        }

        //
        // GET: /Funcionario/Delete/5

        public ActionResult Delete(decimal id)
        {
            ORIMaeFuncionario orimaefuncionario = db.ORIMaeFuncionario.Single(o => o.nIdeFuncionario == id);
            return View(orimaefuncionario);
        }

        //
        // POST: /Funcionario/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(decimal id)
        {
            ORIMaeFuncionario orimaefuncionario = db.ORIMaeFuncionario.Single(o => o.nIdeFuncionario == id);
            db.ORIMaeFuncionario.DeleteObject(orimaefuncionario);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}